package com.demo.java.OD501_550.OD538;

import java.util.Scanner;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【转盘寿司(C卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146512286
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 输入寿司价格数据
        String input_str = in.nextLine();
        String[] tmp2 = input_str.split(" ");
        int count = 0;
        int[] nums = new int[tmp2.length * 2];

        // 构建新的价格数组，以便处理优惠活动的情况
        for (int i = 0; i < tmp2.length; i++) {
            nums[i] = Integer.parseInt(tmp2[i]);
            nums[i + tmp2.length] = Integer.parseInt(tmp2[i]);
            count += 2;
        }

        // 用于存储最终结果的数组
        int[] res = new int[count];
        // 单调栈
        Deque<Integer> stack = new ArrayDeque<>();
        int i = 0;

        // 核心处理逻辑
        while (true) {
            if (i >= count) {
                // 如果栈中还有元素，更新它们的最终结果
                while (!stack.isEmpty()) {
                    int next = stack.pop();
                    res[next] = nums[next];
                }

                // 输出最终结果
                StringBuilder output_str = new StringBuilder();
                for (int k = 0; k < count / 2; k++) {
                    output_str.append(res[k]).append(" ");
                }
                System.out.println(output_str.toString().trim());
                break;
            } else {
                // 如果栈顶元素的价格大于当前价格，就出栈并更新价格
                while (!stack.isEmpty() && nums[stack.peek()] > nums[i]) {
                    int next = stack.pop();
                    res[next] = nums[next] + nums[i];
                }
                stack.push(i);
            }
            i++;
        }
    }
}